home *** CD-ROM | disk | FTP | other *** search
-
- include 'exec/execbase.i'
- include 'libraries/reqtools.i'
- include 'lvo/dos_lib.i'
- include 'lvo/exec_lib.i'
- include 'lvo/reqtools_lib.i'
-
- Test = 0 ; 0 - off ; 1 - on
-
- DosBase = 0*4
- ReqBase = 1*4
- FileReqL = 2*4
- FileHandles = 3*4
- ReadedBytes = 4*4
-
- Section Main_Code,Code
-
- include 'dh1:sources/sources/easystart.i'
-
- OpenIt
- lea Variables(pc),a5
-
- ;open dos.library
-
- moveq #0,d0
- lea DosName(pc),a1
- move.l 4.w,a6
- jsr _LVOOpenLibrary(a6)
- move.l d0,DosBase(a5)
- beq.b ErrorOpenDos
-
- ;open reqtools.library
-
- moveq #38,d0 ;version 38
- lea ReqName(pc),a1
- jsr _LVOOpenLibrary(a6)
- move.l d0,ReqBase(a5)
- beq.b ErrorOpenReq
-
- ;przydzielenie struktury dla file requesterow
-
- moveq #0,d0
- sub.l a0,a0
- move.l ReqBase(a5),a6
- jsr _LVOrtAllocRequestA(a6)
- move.l d0,FileReqL(a5)
- beq.b ErrorAllocReqL
-
- bsr.b Main
-
- move.l FileReqL(a5),a1
- move.l ReqBase(a5),a6
- jsr _LVOrtFreeRequest(a6)
- ErrorAllocReqL
- move.l ReqBase(a5),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- ErrorOpenReq
- move.l DosBase(a5),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- ErrorOpenDos
- moveq #0,d0
- rts
-
- **************************************************************************
-
- Main
- lea About(pc),a1
- moveq #0,D0
- bsr.w Request
-
- lea FileReqNameLoad(pc),a3
- bsr.w ChooseFile
- tst.l d0
- beq Quit
-
- bsr.w LoadFile
- tst.l d0
- beq Quit
-
- lea WhichD3(pc),a1
- moveq #1,D0
- bsr.w Request
- move.w D0,ValueD3
- beq.b .zero
- move.w #$100F,ValueD3
- .zero
- lea WhatSYNCUsed(pc),a1
- moveq #-1,D0
- bsr.w Request
- move.w D0,OriginalSYNC
- beq.b .original
-
- lea InsertAnyDOSDisk(pc),a1
- moveq #0,D0
- bsr.w Request
- bra.b .go
- .original
- lea InsertOriginalDisk(pc),a1
- moveq #0,D0
- bsr.w Request
- .go
- bsr.w Decode
- lea Variables(pc),a5
- tst.l d0
- beq.b wrong
-
- lea FileReqNameSave(pc),a3
- bsr.b ChooseFile
- tst.l d0
- beq.b Quit
-
- move.l #SaveBufor,d7
- move.l DestDecode,d0
- sub.l d7,d0
- move.l ReadedBytes(a5),d6
- sub.l d0,d6
- move.l d0,ReadedBytes(a5)
- bsr.w SaveFile
- tst.l d0
- beq.b Quit
-
- tst.w Again
- beq.b .skip
-
- lea FileReqNameSave(pc),a3
- bsr.b ChooseFile
- tst.l d0
- beq.b Quit
-
- move.l #Bufor,d7
- add.l ReadedBytes(a5),d7
- move.l d6,ReadedBytes(a5)
- bsr.w SaveFile
- tst.l d0
- beq.b Quit
-
- bsr.w DisplayRegs
- .skip
- lea Complete(pc),a1
- moveq #0,D0
- bsr.w Request
-
- bra.b Quit
- wrong
- lea WrongStack(pc),a1
- moveq #0,D0
- bsr.w Request
- Quit
- rts
-
- **************************************************************************
-
- ChooseFile
- lea TagsLoad(pc),a0
- move.l FileReqL(a5),a1
- lea FileNameL,a2
- move.l ReqBase(a5),a6
- jsr _LVOrtFileRequestA(a6)
-
- tst.l d0
- beq.b Cancel
-
- lea FileNameL,a0
- lea FullNameL,a1
- move.l FileReqL(a5),a2
- move.l $10(a2),a2
- tst.b (a2)
- beq.b _Petla2
- _Petla:
- move.b (a2)+,(a1)+
- bne.b _Petla
- subq.l #2,a1
- move.b (a1)+,d0
- cmp.b #':',d0
- beq.s _Petla2
- move.b #'/',(a1)+
- _Petla2:
- move.b (a0)+,(a1)+
- bne.b _Petla2
- move.b #0,(a1)+
-
- moveq #1,D0
- Cancel
- rts
-
-
- LoadFile
- lea FullNameL,a0
- move.l a0,d1
- move.l #MODE_OLDFILE,d2
- move.l DosBase(a5),a6
- jsr _LVOOpen(a6)
- move.l d0,FileHandles(a5)
- beq.b .ErrorOpenFile
-
- move.l FileHandles(a5),d1
- move.l #Bufor,d2
- move.l #$50000,d3
- move.l DosBase(a5),a6
- jsr _LVORead(a6)
- move.l D0,ReadedBytes(A5)
- beq.b .ErrorOpenFile
-
- move.l FileHandles(a5),d1
- move.l DosBase(a5),a6
- jsr _LVOClose(a6)
-
- moveq #1,D0
- .ErrorOpenFile
- rts
-
- SaveFile
- lea FullNameL,a0
- move.l a0,d1
- move.l #MODE_NEWFILE,d2
- move.l DosBase(a5),a6
- jsr _LVOOpen(a6)
- move.l d0,FileHandles(a5)
- beq.b .ErrorOpenFile
-
- move.l FileHandles(a5),d1
- move.l d7,d2
- move.l ReadedBytes(A5),d3
- move.l DosBase(a5),a6
- jsr _LVOWrite(a6)
- tst.l d0
- beq.b .ErrorOpenFile
-
- move.l FileHandles(a5),d1
- move.l DosBase(a5),a6
- jsr _LVOClose(a6)
-
- moveq #1,D0
- .ErrorOpenFile
- rts
-
- ***************************************************************************
-
- Request
- lea RequesterTags(pc),a0
- tst.l D0
- beq.b .skip
- bpl.b .skip3
- lea RequesterGad2(pc),a2
- bra.b .skip2
- .skip
- lea RequesterGad(pc),a2
- bra.b .skip2
- .skip3
- lea RequesterGad3(pc),a2
- .skip2
- sub.l a3,a3
- sub.l a4,a4
- move.l ReqBase(a5),a6
- jsr _LVOrtEZRequestA(a6)
-
- rts
-
- **************************************************************************
-
- DisplayRegs
- ; tst.w OriginalSYNC
- ; bne.b .skip
-
- lea AllRegsText(pc),a1
- lea Registers6(pc),a4
- .go
- lea RequesterTags(pc),a0
- lea RequesterGad(pc),a2
- sub.l a3,a3
- move.l ReqBase(a5),a6
- jsr _LVOrtEZRequestA(a6)
-
- rts
- ;.skip
- ; lea RegsText(pc),a1
- ; lea Registers6+4(pc),a4
- ; bra.b .go
-
- **************************************************************************
-
- GetVBR
- OPT P=68020
- movec VBR,d0
- OPT P=68000
- rte
- IllegalTrap
- or.w #$0700,SR
- move.l $10.w,-(a7)
- rts
- TraceTrap
- move.l $24.w,-(a7)
- rts
-
- Decode
- moveq #0,D0
- lea lbC000036(pc),a0
- lea Bufor,a1
- lea (a1),a2
- add.l #$50000,a2
- .loop
- cmp.l A1,A2
- beq not_found_stack
- cmp.w #$2F3C,(A1)+
- bne.b .loop
- subq.l #2,A1
- moveq #14,D1
- .loop2
- cmp.l (A0)+,(A1)+
- bne wrong_stack
- dbf D1,.loop2
-
- .loop3
- cmp.l A1,A2
- beq not_found_lock
- cmp.l #$21CF0024,(A1) ; used in Indy Heat
- beq.b .skip
- cmp.w #$23CF,(A1)+
- bne.b .loop3
- cmp.l #$00000024,(A1)
- bne.b .loop3
- subq.l #2,A1 ; start lock
- .skip
- move.l A1,SourceDecode
- move.l A1,Jumper
- lea Bufor,A0
- sub.l A0,A1
- move.l A1,D0
- add.l D0,DestDecode
-
- lea GetVBR(pc),a5
- move.l 4.w,a6
- jsr _LVOSupervisor(a6)
- move.l d0,a0
- tst.l d0
- beq.b .zero
-
- pea IllegalTrap(pc)
- move.l (a7)+,$10(a0)
- pea TraceTrap(pc)
- move.l (a7)+,$24(a0)
- .zero
- moveq #0,d0
- moveq #~(CACRB_EnableI|CACRB_EnableD),d1
- move.l 4.w,a6
- jsr _LVOCacheControl(a6)
- move.l d0,-(a7)
-
- sub.l A0,A0
- movem.l (A0),D0-D7/A1-A2
- lea PageZero,A0
- movem.l D0-D7/A1-A2,(A0)
- move.l $60.w,PageZero+$28
-
- moveq #0,D0
- moveq #0,D1
- moveq #0,D2
- moveq #0,D3
- move.w ValueD3,D3
- moveq #0,D4
- moveq #0,D5
- moveq #0,D6
- moveq #0,D7
- sub.l A0,A0
- sub.l A1,A1
- sub.l A2,A2
- sub.l A3,A3
- sub.l A4,A4
- sub.l A5,A5
- sub.l A6,A6
-
- bsr.s CopyLock
-
- lea PageZero,A0
- movem.l (A0),D0-D7/A1-A2
- sub.l A0,A0
- movem.l D0-D7/A1-A2,(A0)
- move.l PageZero+$28,$60.w
-
- move.l (a7)+,d0
- move.l d0,d1
- move.l 4.w,a6
- jsr _LVOCacheControl(a6)
-
- moveq #1,D0
- not_found_lock
- wrong_stack
- not_found_stack
- rts
-
- CopyLock
- pea lbC00000C(PC)
- move.l (SP)+,$10.w
- illegal
- lbC00000C:
- movem.l D0-D7/A0-A7,-(SP)
- ; pea lbC00002E(PC)
- ; move.l (SP)+,$10.w
- ; movea.l SP,A0
-
- ; OPT P=68020
-
- ; movec CACR,D0
- ; move.l D0,$3C(SP)
-
- clr.l $3C(a7)
-
- ; andi.l #$7FFF7EFE,D0
- ; movec D0,CACR
-
- ; OPT P=68000
-
- lbC00002E:
- ; movea.l A0,SP
- movem.l lbC000036(PC),D0-D7/A0-A6
- bra.b skip
- lbC000036
- move.l #$4E730000,-(SP)
- move.l #$10,-(SP)
- move.l #$4DDB9,-(SP)
- move.l #$BD96BDAE,-(SP)
- move.l #$B386B586,-(SP)
- move.l #$D046D246,-(SP)
- move.l #$246A71F,-(SP)
- move.l #$23C17,-(SP)
- move.l #$42C6F,-(SP)
- move.l #$BD96BDAE,-(SP)
- skip
- move.l (A7),StackMem
- move.l 4(A7),StackMem+4
-
- move.l #$4E730000,-(SP)
-
- pea stack2(pc)
- move.w #$4EB9,-(A7)
-
- ; move.l #$10,-(SP)
- ; move.l #$4DDB9,-(SP) ; add.l D6,$10
-
- move.w #$4,-(A7)
- move.l #$BD96BDAE,-(SP)
- move.l #$B386B586,-(SP)
- move.l #$D046D246,-(SP)
- move.l #$246A71F,-(SP)
- move.l #$23C17,-(SP)
- move.w #$2C6F,-(A7)
-
- ; move.l #$42C6F,-(SP) ; eor.l D6,(A6)
- ; move.l #$BD96BDAE,-(SP) ; eor.l D6,4(A6)
-
- pea stack(pc)
- move.w #$4EB9,-(A7)
-
- move.l Jumper(pc),-(a7)
-
- ifne Test
-
- .m move.w $DFF006,$DFF180
- bra.b .m
-
- endc
-
- rts
- Jumper
- dc.l 0
-
- ; wykonywane podczas zakodowywania instrukcji - stos 1
-
- stack
- movem.l D0/A5-A6,Regs
-
- move.l SourceDecode(pc),A5 ; begin address instrukcji wykonanej
- move.l 2+4(A7),A6 ; begin address instrukcji do wykonania
- sub.l A5,A6
- move.l A6,D0 ; instruction length
- move.l DestDecode(pc),A6
- subq.l #1,D0
- .loop
- move.b (A5)+,(A6)+
- dbf D0,.loop
- move.l A5,SourceDecode
- move.l A6,DestDecode
-
- ifne Test
-
- sub.l #SaveBufor,a6
- cmp.l #$EE0,a6
- blo.b .skip
-
- .m move.w $DFF006,$DFF180
- bra.b .m
- .skip
- endc
-
- movem.l Regs(pc),D0/A5-A6
-
- eor.l D6,(A6) ; zakodowanie wykonanej instrukcji
- eor.l D6,4(A6)
-
- rts
-
- stack1
- movem.l D0/A5-A6,Regs
-
- move.l RegA6(pc),A6
- eor.l D6,(A6) ; odkodowanie instrukcji
- eor.l D6,4(A6)
-
- move.l SourceDecode(pc),A5 ; adres poczatkowy instrukcji wykonanej
- move.l 2+4(A7),A6 ; adres poczatkowy instrukcji do wykonania
- sub.l A5,A6
- move.l A6,D0 ; instruction length
- move.l DestDecode(pc),A6
- subq.l #1,D0
- .loop
- move.b (A5)+,(A6)+
- dbf D0,.loop
- move.l A5,SourceDecode
- move.l A6,DestDecode
-
- move.l RegA6(pc),A6
- eor.l D6,(A6) ; zakodowanie wykonanej instrukcji
- eor.l D6,4(A6)
-
- movem.l Regs(pc),D0/A5-A6
-
- move.w 4(A7),D6
- andi.w #$A71F,D6
-
- move.w #$4EB9,0+$10(A7) ; jsr stack
- pea stack(pc)
- move.l (A7)+,2+$10(A7)
-
- move.w #$3C17,$A+$10(A7) ; move.w (A7),D6
- move.l #$0246A71F,$C+$10(A7) ; andi.w #$A71F,D6
-
- rts
-
- ; wykonywane podczas odkodowywania instrukcji - stos 1
-
- stack2
-
- ; wykonane podczas wyjscia z copylock'a - stos 3
-
- cmp.l #$487A0014,6+$10(A7) ; pea ...(pc) ; stos 3 ; adres powrotu z illegal instruction
- bne .sk1
- cmp.l #$23CF0000,(A6) ; move.l A7,$24 ; last instruction in copylock
- bne .sk1
- cmp.w #$0024,4(A6)
- bne .sk1
-
- ifne Test
-
- .m move.w $DFF006,$DFF180
- bra.b .m
-
- endc
-
- move.l A0,Regs
- move.l DestDecode(pc),A0
- move.l (A6),(A0)+ ; copy instruction
- move.w 4(A6),(A0)+ ; move.l A7,$24
- move.l A0,DestDecode
- move.l Regs(pc),A0
-
- move.w #$4EB9,0+$10(A7) ; jsr stack6
- pea stack6(pc)
- move.l (A7)+,2+$10(A7) ; instead of eor.l D6,(A6)
- ; eor.l D6,4(A6)
-
- cmp.l #$4E7B0002,$18+$10(A7) ; movec D0,CACR
- bne.b .not_cacr
-
- move.l #$4E714E71,$18+$10(A7)
- .not_cacr
- cmp.l #$4CDF01FF,$44+$10(A7) ; movem.l (A7)+,D0-D7/A0
- bne.b .sk_ip2
-
- move.w #$4EF9,$44+$10(A7)
- pea .FixStack(pc) ; for Indy Heat ?
- move.l (a7)+,$46+$10(A7)
-
- bra .sk_end
- .FixStack
- move.l a4,$42(a7)
- movem.l (a7)+,d0-a6
- addq.w #4,a7
- and.w #$7FFF,(a7)
- rte
-
- .sk_ip2
- cmp.l #$3EBC2700,$4E+$10(A7) ; move.w #$2700,(A7)
- bne.b .sk_ip
-
- move.l #$02577FFF,$4E+$10(A7) ; -> andi.w #$7FFF,(A7) in game RoboCop
-
- .sk_ip
- cmp.l #$2D7C0000,$40+$10(A7) ; move.l #$500,$C2(A6)
- bne .sk_end
- cmp.l #$050000C2,$44+$10(A7) ; return address from game Gods
- bne .sk_end
-
- move.l #$4E714E71,$40+$10(A7) ; normal return address from copylock
- move.l #$2D4C00C2,$44+$10(A7) ; move.l A4,$C2(A6)
-
- bra .sk_end
-
- ; wykonane podczas wejscia do proc. odczytu z dysku - stos 1
-
- .sk1
- cmp.l #$4E714E71,6+$10(A7) ; stos 2
- bne.b .sk0
- cmp.l #$23CF0000,(A6) ; move.l A7,$24
- bne.b .sk0
- cmp.w #$0024,4(A6)
- bne.b .sk0
-
- ifne Test
-
- .m1 move.w $DFF006,$DFF180
- bra.b .m1
-
- endc
-
- move.w #$4EB9,0+$10(A7) ; jsr stack
- pea stack(pc)
- move.l (A7)+,2+$10(A7) ; instead of eor.l D6,(A6)
- ; eor.l D6,4(A6)
-
- move.w #$4EB9,$1E+$10(A7) ; jsr stack4
- pea stack4(pc)
- move.l (A7)+,$20+$10(A7) ; instead of add.l $8,D0
-
- move.w #$4EB9,$36+$10(A7) ; jsr stack5
- pea stack5(pc)
- move.l (A7)+,$38+$10(A7) ; instead of add.l $8,D0
-
- move.l A6,SourceCounter
- addq.l #6,SourceCounter ; 6 bytes - instruction length move.l A7,$24
- move.l DestDecode(pc),DestCounter
- addq.l #6,DestCounter
-
- bra .sk_end
-
- .sk0
- cmp.l #$90AF001C,(A6) ; sub.l $1C(A7),D0
- bne.b .sk2
-
- move.l #$DDB90000,$1E+$10(A7) ; add.l D6,$10
- move.l #$00104EB9,$22+$10(A7) ; jsr stack3
- pea stack3(pc)
- move.l (A7)+,$26+$10(A7)
- move.l #$4E730000,$2A+$10(A7) ; rte
- addq.l #6,(A7)
-
- bra .sk_end
-
- .sk2
- cmp.l #$2F7C0004,(A6) ; move.l #$00042C6F,4(A7)
- bne.b .sk3
- cmp.l #$2C6F0004,4(A6)
- bne.b .sk3
-
- move.w #$BD96,0+$10(A7) ; eor.l D6,(A6)
- move.l #$BDAE0004,2+$10(A7) ; eor.l D6,4(A6)
- move.w #$4EB9,$A+$10(A7) ; jsr stack1
- pea stack1(pc)
- move.l (A7)+,$C+$10(A7)
-
- bra .sk_end
-
- .sk3
- cmp.l #$2F7C0000,(A6) ; move.l #$10,$20(A7)
- bne.b .sk4
- cmp.l #$00100020,4(A6)
- bne.b .sk4
-
- move.l #$DDB90000,$1E+$10(A7) ; add.l D6,$10
- move.l #$00104EB9,$22+$10(A7) ; jsr stack3
- pea stack3(pc)
- move.l (A7)+,$26+$10(A7)
- move.l #$4E730000,$2A+$10(A7) ; rte
- addq.l #6,(A7)
-
- bra .sk_end
-
- .sk4
- cmp.l #$90AF0004,(A6) ; sub.l 4(A7),D0
- bne.b .sk5
-
- move.w #$BD96,0+$10(A7) ; eor.l D6,(A6)
- move.l #$BDAE0004,2+$10(A7) ; eor.l D6,4(A6)
- move.w #$4EB9,$A+$10(A7) ; jsr stack1
- pea stack1(pc)
- move.l (A7)+,$C+$10(A7)
-
- bra .sk_end
-
- .sk5
- cmp.l #$90AF0024,(A6) ; sub.l $24(A7),D0
- bne.b .sk6
-
- move.w #$4EB9,$1E+$10(A7) ; jsr stack2
- pea stack2(pc)
- move.l (A7)+,$20+$10(A7)
- move.l #$4E730000,$24+$10(A7) ; rte
-
- move.l StackMem(pc),$28+$10(A7)
- move.l StackMem+4(pc),$2C+$10(A7)
-
- bra .sk_end
-
- .sk6
- cmp.l #$2F7C0004,(A6) ; move.l #$4DDB9,$1C(A7)
- bne.b .sk7
- cmp.l #$DDB9001C,4(A6)
- bne.b .sk7
-
- move.l #$DDB90000,$1E+$10(A7) ; add.l D6,$10
- move.l #$00104EB9,$22+$10(A7) ; jsr stack3
- pea stack3(pc)
- move.l (A7)+,$26+$10(A7)
- move.l #$4E730000,$2A+$10(A7) ; rte
- addq.l #6,(A7)
-
- bra.b .sk_end
-
- .sk7
- cmp.l #$2F7CBD96,(A6) ; move.l #$BD96BDAE,0(A7)
- bne.b .sk8
- cmp.l #$BDAE0000,4(A6)
- bne.b .sk8
-
- move.w #$BD96,0+$10(A7) ; eor.l D6,(A6)
- move.l #$BDAE0004,2+$10(A7) ; eor.l D6,4(A6)
- move.w #$4EB9,$A+$10(A7) ; jsr stack1
- pea stack1(pc)
- move.l (A7)+,$C+$10(A7)
-
- .sk8
- ; used in game Steg The Slug
-
- cmp.l #$90AF0020,(A6) ; sub.l $20(A7),D0
- bne.b .sk9
-
- move.l #$DDB90000,$1E+$10(A7) ; add.l D6,$10
- move.l #$00104EB9,$22+$10(A7) ; jsr stack3
- pea stack3(pc)
- move.l (A7)+,$26+$10(A7)
- move.l #$4E730000,$2A+$10(A7) ; rte
- addq.l #6,(A7)
- .sk9
-
- .sk_end
- add.l D6,$10.w
- move.l A6,RegA6
- rts
-
- stack3
- move.w #$4EB9,$1E+$10(A7) ; jsr stack2
- pea stack2(pc)
- move.l (A7)+,$20+$10(A7)
- move.l #$4E730000,$24+$10(A7) ; rte
-
- move.l StackMem(pc),$28+$10(A7) ; odtworzenie gory stosu 1
- move.l StackMem+4(pc),$2C+$10(A7)
-
- subq.l #6,(A7)
-
- rts
-
- ; stos 3
-
- stack6
- eor.l D6,(A6)
- eor.l D6,4(A6)
-
- move.l SourceDecode(pc),A1
- addq.l #6,a1
- move.l DestDecode(pc),A2
- .loop
- cmp.l A0,A1
- beq.b .skip
- addq.l #2,a1
- move.w #$4E71,(A2)+ ; wstawiam nop, ale copylock
- bra.b .loop ; niekoniecznie jest tym zakonczony
- .skip
- move.l a1,SourceDecode
- move.l a2,DestDecode
-
- move.l A0,A1
- sub.l A2,A2
- sub.l A3,A3
- lea .sk(pc),A4 ; return address from copylock
- ; set to rts
- .sk
- rts
-
- ; w stosie 2 zamiast add.l $8,D0 , zakodowanie programu copylock'a
-
- stack4
- add.l 8.w,D0
-
- cmp.b #1,Change
- bne.b .1
-
- move.w #$4E6E,(A0)
- .1
-
- tst.w OriginalSYNC
- beq.b _89
-
- cmp.b #2,Change
- bne.b .2
-
- move.w #$8914,2(A0)
- .2
- cmp.b #3,Change
- bne.b .3
-
- move.w #$8911,2(A0)
- .3
- cmp.b #4,Change
- bne.b .4
-
- move.w #$8912,2(A0)
- .4
- cmp.b #5,Change
- bne.b .5
-
- move.w #$8951,2(A0)
- .5
- cmp.b #6,Change
- bne.b .6
-
- move.w #$8915,2(A0)
- .6
- clr.b Change
-
- _89
-
- cmp.l #$10,A0 ; czy to pierwsze wejscie do stosu 2 ?
- bne.b .skip2 ; if = 0 tak
-
- move.w #$BD96,0+$18(A7) ; eor.l D6,(A6) ; wstawienie na poczatku stosu 2
- move.l #$BDAE0004,2+$18(A7) ; eor.l D6,4(A6)
-
- bra.b .skip
- .skip2
- tst.b NotCopy ; czy instrukcja juz skopiowana ?
- bne.b .skip ; if <> 0 tak
-
- movem.l D0/A0-A1,Regs
-
- move.l 10+4(A7),A1 ; A1 - adres poczatkowy instrukcji do wykonania
- sub.l A0,A1 ; A0 - adres poczatkowy instrukcji wykonanej
- move.l A1,D0 ; dlugosc instrukcji wykonanej w bajtach
- move.l A0,A1
- sub.l SourceCounter(pc),A1 ; offset od poczatku copylock'a
- add.l DestCounter(pc),A1
- subq.l #1,D0
- .loop
- move.b (A0)+,(A1)+
- dbf D0,.loop
-
- move.l A0,SourceDecode
- move.l A1,DestDecode
-
- movem.l Regs(pc),D0/A0-A1
- .skip
- rts
-
- ; w stosie 2 zamiast add.l $8,D0 , odkodowanie programu copylock'a
-
- stack5
- add.l 8.w,D0
-
- eor.l D0,(A0)+ ; odkodowanie nastepnej instrukcji
- eor.l D0,(A0)
- addq.l #4,(A7) ; ominiecie ponownego dekodowania
- ; gdyz przed chwila to zrobilem
-
- movem.l D0/A0-A1,Regs
- subq.l #4,A0
-
- clr.b NotCopy
-
- move.w (A0),D0
- and.w #$F0FF,D0
- cmp.w #$6000,D0 ; bsr.b ... or bra.b
- bne.b NotLongJump
-
- st NotCopy
-
- move.l A0,A1
- sub.l SourceCounter(pc),A1
- add.l DestCounter(pc),A1
- move.l (A0),(A1)
-
- bra Exit
- NotLongJump
- lsr.w #8,D0
- cmp.b #$60,D0 ; bsr.b ... or bra.b
- bne.b NotJump
-
- st NotCopy
-
- move.l A0,A1
- sub.l SourceCounter(pc),A1
- add.l DestCounter(pc),A1
- move.w (A0),(A1)
-
- bra Exit
- NotJump
- cmp.w #$4E75,(A0) ; rts
- bne.b NotRts
-
- st NotCopy
-
- move.l A0,A1
- sub.l SourceCounter(pc),A1
- add.l DestCounter(pc),A1
- move.w (A0),(A1)
-
- bra Exit
- NotRts
- move.w (A0),D0
- and.w #$F0FF,D0
- cmp.w #$50C8,D0 ; dbcc D?,...
- bcs.b NotDbcc
- cmp.w #$50CF,D0
- bcc.b NotDbcc
-
- st NotCopy
-
- move.l A0,A1
- sub.l SourceCounter(pc),A1
- add.l DestCounter(pc),A1
- move.l (A0),(A1)
-
- bra Exit
- NotDbcc
- cmp.w #$4E6E,(A0) ; move.l USP,A6
- bne.b NotUSPtoA6
-
- move.b #1,Change
-
- move.w #$4E71,(A0)
-
- bra Exit
- NotUSPtoA6
- tst.w OriginalSYNC
- beq _89_2
-
- cmp.l #$303C8914,(A0) ; move.w #$8914,D0
- bne.b NotSYNC
-
- move.b #2,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC
- cmp.l #$303C8911,(A0) ; move.w #$8911,D0
- bne.b NotSYNC2
-
- move.b #3,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC2
- cmp.l #$303C8912,(A0) ; move.w #$8912,D0
- bne.b NotSYNC3
-
- move.b #4,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC3
- cmp.l #$303C8951,(A0) ; move.w #$8951,D0
- bne.b NotSYNC4
-
- move.b #5,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC4
- cmp.l #$3D7C8915,(A0) ; move.w #$8915,-8(A6)
- bne.b NotSYNC5
-
- move.b #6,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC5
- cmp.l #$3D7C8914,(A0) ; move.w #$8914,-6(A6)
- bne.b NotSYNC6
-
- move.b #2,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC6
- cmp.l #$3D7C8911,(A0) ; move.w #$8911,-4(A6)
- bne.b NotSYNC7
-
- move.b #3,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC7
- cmp.l #$3D7C8912,(A0) ; move.w #$8912,-2(A6)
- bne.b NotSYNC8
-
- move.b #4,Change
-
- move.w #$4489,2(A0)
-
- bra Exit
- NotSYNC8
- cmp.w #$B0BC,(A0) ; cmp.l #$A573632C,D0
- bne.b NotCMP
-
- move.l 2(A0),4(A7)
-
- bra Exit
- NotCMP
- cmp.w #$0C50,(A0) ; cmpi.w #$2A91,(A0)
- bne.b NotCMP2 ; cmpi.w #$AA92,(A0)
- ; cmpi.w #$AA94,(A0)
- move.l 8(A7),A1 ; A0
- move.w 2(A0),(A1)
-
- bra Exit
- NotCMP2
- cmp.w #$9081,(A0) ; sub.l D1,D0
- bne.b NotSub2
-
- move.l #$25,4(A7) ; D0=$25
- moveq #$12,D1
-
- bra.b Exit
- NotSub2
- cmp.l #$B07C03AC,(A0) ; cmp.w #$03AC,D0
- bne.b NotCMP3
-
- move.l #$400,4(A7) ; D0=$400
-
- bra.b Exit
- NotCMP3
- cmp.w #$0C98,(A0) ; cmpi.l #$552AAAA5,(A0)+
- bne.b NotCMP4
- cmp.l #$552AAAA5,2(A0)
- bne.b NotCMP4
-
- move.l 8(A7),A1 ; A0
- move.l 2(A0),(A1)
-
- bra.b Exit
- NotCMP4
- cmp.w #$0C98,(A0) ; cmpi.l #$55292AA9,(A0)+
- bne.b NotCMP5
- cmp.l #$55292AA9,2(A0)
- bne.b NotCMP5
-
- move.l 8(A7),A1 ; A0
- move.l 2(A0),(A1)
-
- bra.b Exit
- NotCMP5
- cmp.l #$B07C0054,(A0) ; cmp.w #$54,d0
- bne.b NotCmp
-
- move.l #$55,4(A7) ; D0=$55
-
- bra.b Exit
- NotCmp
- ; cmp.w #$2006,(A0) ; move.l D6,D0
- ; bne.b NotID
-
- _89_2
- tst.w Again
- bne.b NotID
-
- cmp.w #$DDFC,(A0) ; adda.l #$???,A6
- bne.b NotID
-
- st Again
-
- ; if you wish decode copylock+file, but you have not original game disk,
- ; set one value below
-
- ; move.l #$A3EF1306,4(A7) ;ID value from Advanced Ski Simulator
- ; move.l #$E55A6DD8,4(A7) ;ID value from Defender 2
- ; move.l #$EB3D7FF7,4(A7) ;ID value from Die Hard 2
- ; move.l #$9EA62DB3,4(A7) ;ID value from Graham Goohes Cricket
- ; move.l #$,4(A7) ;ID value from Guardian Angel
- ; move.l #$8290FFC1,4(A7) ;ID value from Insects In Space
- ; move.l #$4C41AE40,4(A7) ;ID value from Italy 1990
- ; move.l #$E55A6DD8,4(A7) ;ID value from Munsters
- ; move.l #$A3EF1306,4(A7) ;ID value from Nitroboost Challenge
- ; move.l #$704BCE83,4(A7) ;ID value from Paradroid 90
- ; move.l #$7C3369C9,4(A7) ;ID value from Photon Storm
- ; move.l #$DC84624B,4(A7) ;ID value from Power Drift
- ; move.l #$32734940,4(A7) ;ID value from Resolution 101
- ; move.l #$9884514B,4(A7) ;ID value from RoboCop
- ; move.l #$9EA62DB3,4(A7) ;ID value from Spellfire The Sorcerer
- ; move.l #$5C80675B,4(A7) ;ID value from Steg The Slug
- ; move.l #$32734940,4(A7) ;ID value from Thunderstrike
- ; move.l #$9B50CBE8,4(A7) ;ID value from Total Recall
-
- lea Registers6(pc),a0
-
- ; tst.w OriginalSYNC
- ; bne.b .skip
-
- move.l 4(A7),(a0)+
- ; bra.b .go
- ;.skip
- ; addq.l #4,a0
- ;.go
- move.l d1,(a0)+
- move.l d2,(a0)+
- move.l d3,(a0)+
- move.l d4,(a0)+
- move.l d5,(a0)
- NotID
-
- Exit
- movem.l Regs(pc),D0/A0-A1
- rts
-
- **************************************************************************
-
- DosName dc.b 'dos.library',0
- ReqName dc.b 'reqtools.library',0
-
- About dc.b 'Wanted Team',10,10
- dc.b 'presents',10,10
- dc.b 'Rob Northen Copylock decoder V1.34',10,10
- dc.b 'Code: Mr.Larmer',10,10
- dc.b 'Release date: 30 January 2000',0
- WrongStack
- dc.b "Stack in your file isn't",10
- dc.b 'the same as in my procedure',10
- dc.b "(loaded file isn't copylock)",0
- WhatSYNCUsed
- dc.b 'If you use original key disk',10
- dc.b 'choose SYNC $89??',0
- WhichD3
- dc.b 'Which value of D3 register',10
- dc.b 'you want to use ?',0
- InsertOriginalDisk
- dc.b 'Insert original key disk with',10
- dc.b 'Rob Northen Copylock',10
- dc.b 'in drive df0:',0
- InsertAnyDOSDisk
- dc.b 'Insert any DOS disk',10
- dc.b 'in drive df0:',0
- FileReqNameLoad
- dc.b 'Choose Copylock program to load',0
- FileReqNameSave
- dc.b 'Choose Copylock decoded to save',0
-
- Complete dc.b 'Decode complete',0
- RequesterGad
- dc.b 'Ok',0
- RequesterGad2
- dc.b '$4489|$89??',0
- RequesterGad3
- dc.b '$100F|$0000',0
- AllRegsText
- dc.b 'Registers used for decode file',10,10
- dc.b 'D0 = $%08lx , D1 = $%08lx',10
- dc.b 'D2 = $%08lx , D3 = $%08lx',10
- dc.b 'D4 = $%08lx , D5 = $%08lx',0
- ;RegsText
- ; dc.b 'Registers used for decode file',10,10
- ; dc.b 'D0 = unknown , D1 = $%08lx',10
- ; dc.b 'D2 = $%08lx , D3 = $%08lx',10
- ; dc.b 'D4 = $%08lx , D5 = $%08lx',0
-
- CNOP 0,2
- TagsLoad
- dc.l RT_ReqPos,REQPOS_CENTERSCR
- dc.l 0
- RequesterTags
- dc.l RT_ReqPos,REQPOS_CENTERSCR
- dc.l RTEZ_Flags,EZREQF_CENTERTEXT
- dc.l 0
-
- StackMem ds.l 2
- Regs ds.l 3
- RegA6 dc.l 0
- SourceDecode dc.l 0
- DestDecode dc.l SaveBufor
- SourceCounter dc.l 0
- DestCounter dc.l 0
- NotCopy dc.b 0
- Change dc.b 0
- OriginalSYNC dc.w 0
- ValueD3 dc.w 0
- Again dc.w 0
- Registers6 ds.l 6
-
- Variables ds.l 5
-
- section data,bss_c
- Bufor ds.b $50004
- section data2,bss
- FileNameL ds.b 108
- FullNameL ds.b 256
- PageZero ds.b $2C
- SaveBufor ds.b $50004
-